An app can hook into the Web API (REST + Realtime), to allow for external access. A use case would for example be a Raspberry PI that reports it's status to Homey.
Your app's API edpoints are available under the following url: /api/app/com.yourapp.id/. All endpoints are by default protected, and the requesting user needs permission to your app (which is granted by default after installation). You can override this by setting public: true.
To add API endpoints to your app, create a file /api.js in your app's root folder. An example is shown below.
/api.js
module.exports = [
{
method: 'GET',
path: '/',
public: true,
fn: function( args, callback ){
const result = Homey.app.getSomething();
// callback follows ( err, result )
callback( null, result );
// access /?foo=bar as args.query.foo
}
},
{
method: 'POST',
path: '/',
fn: function( args, callback ){
const result = Homey.app.addSomething( args.body );
if( result instanceof Error ) return callback( result );
return callback( null, result );
}
},
{
method: 'PUT',
path: '/:id',
fn: function( args, callback ){
const result = Homey.app.updateSomething( args.params.id, args.body );
if( result instanceof Error ) return callback( result );
return callback( null, result );
}
},
{
method: 'DELETE',
path: '/:id',
fn: function( args, callback ){
const result = Homey.app.deleteSomething( args.params.id );
if( result instanceof Error ) return callback( result );
return callback( null, result );
}
}
]
Homey.appis the instance of your App.
Parameters
Possible parameters for an API endpoint object are:
| key | type | value |
|---|---|---|
| method | String, Array |
GET, POST, PUT or DELETE, or an array of these values |
| path | String |
e.g. /, /:foo, /bar/:foo |
| fn | Function |
The function to execute when the call has been made |
| public | Boolean |
Set to true to make this endpoint accessible without a token |
| role | String |
Set to owner to make this endpoint only accessible to owners |
The args object
The args object has three properties: body, query and params.
Body
This is an object with the body, when your request has method POST or PUT. JSON is automatically parsed.
Params
The params object is a set of strings defined in your path.
Query
The params object is a set of strings that are provided as query parameters, e.g. ?foo=bar will result in { "foo": "bar" }.
Realtime
Your app can emit 'realtime' events, which are one-way events to a subscribing client, e.g. a browser showing a Settings page.
/app.js
Homey.ManagerApi.realtime('my_event', 'my_json_stringifyable_value')
.catch( this.error )